package com.wk.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;

import java.util.Map;
import java.util.concurrent.TimeUnit;

@Component
public class RedisUtil {

    @Autowired
    private RedisTemplate<String, Object> redisTemplate;
    /**
     26
     * 指定缓存失效时间
     27
     * @param key 键
    28
     * @param time 时间(秒)
    29
     * @return
    30
     */

    public boolean expire(String key, long time) {
        try {
            if (time > 0) {
                redisTemplate.expire(key, time, TimeUnit.SECONDS);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     83
     * 普通缓存获取
     84
     * @param key 键
    85
     * @return 值
    86
     */
    public Object get(String key) {
        return key == null ? new Object() : redisTemplate.opsForValue().get(key);
    }



    /**
     92
     * 普通缓存放入
     93
     * @param key 键
    94
     * @param value 值
    95
     * @return true成功 false失败
    96
     */
    public boolean set(String key, Object value) {
        try {
            redisTemplate.opsForValue().set(key, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     53
     * 判断key是否存在
     54
     * @param key 键
    55
     * @return true 存在 false不存在
    56
     */

    public boolean hasKey(String key) {
        try {
            return redisTemplate.hasKey(key);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    /**
     67
     * 删除缓存
     68
     * @param key 可以传一个值 或多个
    69
     */

    @SuppressWarnings("unchecked")

    public void del(String... key) {

        if (key != null && key.length > 0) {

            if (key.length == 1) {

                redisTemplate.delete(key[0]);

            } else {

                redisTemplate.delete(CollectionUtils.arrayToList(key));

            }

        }
    }

    /**
     157
     * HashGet
     158
     * @param key 键 不能为null
    159
     * @param item 项 不能为null
    160
     * @return 值
    161
     */
    public Object hget(String key, String item) {
        return redisTemplate.opsForHash().get(key, item);
    }
    /**
     167
     * 获取hashKey对应的所有键值
     168
     * @param key 键
    169
     * @return 对应的多个键值
    170
     */
    public Map<Object, Object> hmget(String key) {
/*
        return redisTemplate.opsForHash().entries(key);*/
           return redisTemplate.opsForHash().entries(key);
   }

    /**
     192
     * HashSet 并设置时间
     193
     * @param key 键
    194
     * @param map 对应多个键值
    195
     * @param time 时间(秒)
    196
     * @return true成功 false失败
    197
     */
    public boolean hmset(String key, Map<String, Object> map, long time) {
        try {
            redisTemplate.opsForHash().putAll(key, map);
            if (time > 0) {
                expire(key, time);
            }
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     212
     * 向一张hash表中放入数据,如果不存在将创建
     213
     * @param key 键
    214
     * @param item 项
    215
     * @param value 值
    216
     * @return true 成功 false失败
    217
     */
    public boolean hset(String key, String item, Object value) {
        try {
            redisTemplate.opsForHash().put(key, item, value);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }



}
